﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using FrbaBus.Properties;

namespace FrbaBus.AbmMicro
{
    public partial class FormAltaMicroTraspaso : Form
    {

        private long micro;
        private string fechaAlta;

        public FormAltaMicroTraspaso(long micro, string fechaAlta)
        {
            InitializeComponent();
            CargarCombos();
            this.micro = micro;
            this.fechaAlta = fechaAlta;
        }

        public FormAltaMicroTraspaso(long micro)
        {
            InitializeComponent();
            CargarCombos();
            this.micro = micro;
        }

        private void CargarCombos()
        {
            string query = "";

            query = "select distinct serv_nombre from THE_BEST_IAS.servicios order by 1";

            SqlDataReader dr = DbHelper.ExecuteQuery(query);

            if (dr.HasRows)
            {
                int i = 0;
                while (dr.Read())
                {
                    cbTipoServicio.Items.Insert(i, dr[0].ToString());
                    i++;
                }
            }

            cbPisos.Items.Insert(0, "1");
            cbPisos.Items.Insert(1, "2");

            query = "";

            query = "select distinct marc_nombre from THE_BEST_IAS.marcas MA join THE_BEST_IAS.micros MI on MA.marc_codigo=MI.marc_codigo";

            SqlDataReader dr2 = DbHelper.ExecuteQuery(query);

            if (dr2.HasRows)
            {
                int i = 0;
                while (dr2.Read())
                {
                    cbMarca.Items.Insert(i, dr2[0].ToString());
                    i++;
                }
            }


        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
                //ALTA 

               long microSuplente;

                var errores = validarMicro();

                //Si no hay errores
                if (errores.ToString() == String.Empty)
                {
                    string sConnectionString = Settings.Default.GD1C2013ConnectionString;
                    SqlConnection connection = new SqlConnection(sConnectionString);
                    SqlCommand cmd = new SqlCommand("THE_BEST_IAS.pr_alta_micro", connection);

                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new SqlParameter("@p_mic_modelo", SqlDbType.NVarChar)).Value = txModelo.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_mic_patente", SqlDbType.NVarChar)).Value = txPatente.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_marc_nombre", SqlDbType.NVarChar)).Value = cbMarca.Text.Trim();
                    cmd.Parameters.Add(new SqlParameter("@p_serv_nombre", SqlDbType.NVarChar)).Value = cbTipoServicio.Text.ToString();
                    cmd.Parameters.Add(new SqlParameter("@p_mic_cant_pisos", SqlDbType.Int)).Value = Convert.ToInt16(cbPisos.Text.Trim().ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_cant_butacas", SqlDbType.Int)).Value = Convert.ToInt16(txCantButacas.Text.Trim().ToString());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_kg_disponibles", SqlDbType.Int)).Value = Convert.ToInt64(txCantKg.Text.Trim());
                    cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_alta", SqlDbType.DateTime)).Value = Fechas.fechaSistema;


                    cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.Int));
                    cmd.Parameters["@p_mic_codigo"].Direction = ParameterDirection.Output;

                    connection.Open();
                    cmd.ExecuteNonQuery(); 
                    microSuplente = (int)cmd.Parameters["@p_mic_codigo"].Value;
                    connection.Close();

                    this.Hide();

                    FormButacas form = new FormButacas(microSuplente, Convert.ToInt32(txCantButacas.Text));
                    form.ShowDialog(this);

                    if (this.fechaAlta != null) //ES BAJA POR FUERA DE SERVICIO
                    {
                        string sConnectionString2 = Settings.Default.GD1C2013ConnectionString;
                        SqlConnection connection2 = new SqlConnection(sConnectionString2);
                        SqlCommand cmd2 = new SqlCommand("THE_BEST_IAS.pr_traspasar_viajes", connection2);
                        cmd2.CommandType = CommandType.StoredProcedure;

                        cmd2.Parameters.Add(new SqlParameter("@p_mic_codigo_origen", SqlDbType.BigInt)).Value = this.micro;
                        cmd2.Parameters.Add(new SqlParameter("@p_mic_codigo_suplente", SqlDbType.BigInt)).Value = microSuplente;
                        cmd2.Parameters.Add(new SqlParameter("@p_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                        cmd2.Parameters.Add(new SqlParameter("@p_fecha_reinicio", SqlDbType.DateTime)).Value = fechaAlta;

                        cmd2.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                        cmd2.CommandTimeout = 1000;

                        connection2.Open();
                        cmd2.ExecuteNonQuery();

                        int valorRetorno = Convert.ToInt32(cmd2.Parameters["@returnValue"].Value);

                        connection2.Close();

                        if (valorRetorno == 0)
                        {
                            //TRASPASO OK --> LLAMO A LA BAJA
                            sConnectionString = Settings.Default.GD1C2013ConnectionString;
                            connection = new SqlConnection(sConnectionString);
                            cmd = new SqlCommand("THE_BEST_IAS.pr_deshabilita_micro", connection);
                            cmd.CommandType = CommandType.StoredProcedure;

                            cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
                            cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                            cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_reinicio", SqlDbType.DateTime)).Value = Convert.ToDateTime(fechaAlta);
                            
                            cmd.CommandTimeout = 1000;

                            connection.Open();
                            cmd.ExecuteNonQuery();


                            connection.Close();

                            MessageBox.Show("El traspaso de pasajes/encomiendas al nuevo micro se ha realizado exitosamente", "INFORMACION");
                            
                            this.Hide();
                        }
                    }
                    else //ES BAJA POR FIN DE VIDA UTIL
                    {
                        string sConnectionString2 = Settings.Default.GD1C2013ConnectionString;
                        SqlConnection connection2 = new SqlConnection(sConnectionString2);
                        SqlCommand cmd2 = new SqlCommand("THE_BEST_IAS.pr_traspasar_viajes", connection2);
                        cmd2.CommandType = CommandType.StoredProcedure;

                        cmd2.Parameters.Add(new SqlParameter("@p_mic_codigo_origen", SqlDbType.BigInt)).Value = this.micro;
                        cmd2.Parameters.Add(new SqlParameter("@p_mic_codigo_suplente", SqlDbType.BigInt)).Value = microSuplente;
                        cmd2.Parameters.Add(new SqlParameter("@p_fecha_baja", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                        cmd2.Parameters.Add(new SqlParameter("@p_fecha_reinicio", SqlDbType.DateTime)).Value = DBNull.Value;

                        cmd2.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue;
                        cmd2.CommandTimeout = 1000;

                        connection2.Open();
                        cmd2.ExecuteNonQuery();

                        int valorRetorno = Convert.ToInt32(cmd2.Parameters["@returnValue"].Value);

                        connection2.Close();

                        if (valorRetorno == 0)
                        {
                            //TRASPASO OK --> LLAMO A LA BAJA

                            sConnectionString = Settings.Default.GD1C2013ConnectionString;
                            connection = new SqlConnection(sConnectionString);
                            cmd = new SqlCommand("THE_BEST_IAS.pr_baja_micro", connection);
                            cmd.CommandType = CommandType.StoredProcedure;

                            cmd.Parameters.Add(new SqlParameter("@p_mic_codigo", SqlDbType.BigInt)).Value = this.micro;
                            cmd.Parameters.Add(new SqlParameter("@p_mic_fecha_baja_definitiva", SqlDbType.DateTime)).Value = Fechas.fechaSistema;
                          
                            cmd.CommandTimeout = 1000;

                            connection.Open();
                            cmd.ExecuteNonQuery();

                            connection.Close();
                           
                            MessageBox.Show("El traspaso de pasajes/encomiendas al nuevo micro se ha realizado exitosamente", "INFORMACION");

                            this.Hide();
                        }
 

                    }
                     
                }
                else
                {
                    MessageBox.Show(errores.ToString());
                    return;
                }

        }

        
        private StringBuilder validarMicro()
        {
            var errores = new StringBuilder();

            if (txModelo.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese el campo MODELO antes de continuar");
                errores.AppendLine();
            }
            if (txPatente.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese el campo PATENTE antes de continuar");
                errores.AppendLine();
            }
            if (cbMarca.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione una MARCA antes de continuar");
                errores.AppendLine();
            }
            if (cbTipoServicio.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione un TIPO DE SERVICIO antes de continuar");
                errores.AppendLine();
            }
            if (cbPisos.Text == String.Empty)
            {
                errores.Append("Por favor, seleccione la cantidad de PISOS antes de continuar");
                errores.AppendLine();
            }
            if (txCantButacas.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese la cantidad de BUTACAS antes de continuar");
                errores.AppendLine();
            }
            if (txCantKg.Text == String.Empty)
            {
                errores.Append("Por favor, ingrese la cantidad de KILOGRAMOS DISPONIBLES antes de continuar");
                errores.AppendLine();
            }
            return errores;
        }




    }
}
